package org.dromara.third.convert.blindDiskWork.web;

import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.BusinessServiceException;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidateUtil;
import org.dromara.system.domain.BlindDiskWork;
import org.dromara.system.mapper.BlindDiskWorkMapper;
import org.dromara.third.auth.beans.constans.ExceptionEnum;
import org.dromara.third.auth.common.auth.TokenThreadLocal;
import org.dromara.third.auth.util.AESUtil;
import org.dromara.third.convert.blindDiskWork.dto.BlindDiskWorkDTO;
import org.dromara.third.convert.blindDiskWork.validator.BlindDiskWorkValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RequiredArgsConstructor
@RestController
@Slf4j
@RequestMapping("/api/v1")
public class ConvertBlindDiskWorkController {

    @Autowired
    private BlindDiskWorkMapper blindDiskWorkMapper;

    @PostMapping("/blindDiskWork")
    @Transactional
    public R<Void> addBlindDiskWork(@RequestBody String jsonReq) {
        String orgCode = TokenThreadLocal.getThreadLocal();
        BlindDiskWorkDTO blindDiskWorkDTO;
        try {
            String decrypt = AESUtil.decrypt(jsonReq);
            blindDiskWorkDTO = JSONObject.parseObject(decrypt, BlindDiskWorkDTO.class);
        } catch (Exception e) {
            log.info("解析参数异常");
            throw new BusinessServiceException(ExceptionEnum.AuthException06.getCode(), ExceptionEnum.AuthException06.getMessage());
        }
        // 校验参数
        List<String> errorMessageList = new ArrayList<>();
        ValidateUtil.validate(errorMessageList, blindDiskWorkDTO, new BlindDiskWorkValidator());
        if (!CollectionUtils.isEmpty(errorMessageList)) {
            String errorMessage = StringUtils.join(errorMessageList, ",");
            throw new BusinessServiceException(ExceptionEnum.AuthException06.getCode(), errorMessage);
        }
        BlindDiskWork blindDiskWork = assembleBlindDiskWorkData(orgCode, blindDiskWorkDTO);
        int count = blindDiskWorkMapper.countWithOutDelFlag(blindDiskWork.getId());
        if (count == 0) {
            blindDiskWorkMapper.insert(blindDiskWork);
        } else {
            blindDiskWorkMapper.updateWithOutDelFlag(blindDiskWork);
        }
        return R.ok();
    }

    private BlindDiskWork assembleBlindDiskWorkData(String orgCode, BlindDiskWorkDTO dto) {
        BlindDiskWork blindDiskWork = new BlindDiskWork();
        try {
            blindDiskWork.setId(dto.getZyid());
            blindDiskWork.setZyzbh(dto.getZyzbh());
            blindDiskWork.setSqdw(dto.getSqdw());
            blindDiskWork.setZysqsj(DateUtils.parseDate(dto.getZysqsj()));
            blindDiskWork.setSqr(dto.getSqr());
            blindDiskWork.setZynr(dto.getZynr());
            blindDiskWork.setZylb(dto.getZylb());
            blindDiskWork.setZywz(dto.getZywz());
            blindDiskWork.setGdjz(dto.getGdjz());
            blindDiskWork.setGdwd(dto.getGdwd());
            blindDiskWork.setGdyl(dto.getGdyl());
            blindDiskWork.setMbcz(dto.getMbcz());
            blindDiskWork.setMbgg(dto.getMbgg());
            blindDiskWork.setZyryxx(dto.getZyryxx());
            blindDiskWork.setZydwlx(dto.getZydwlx());
            blindDiskWork.setZydwmc(dto.getZydwmc());
            blindDiskWork.setZyfzr(dto.getZyfzr());
            blindDiskWork.setZysskssj(DateUtils.parseDate(dto.getZysskssj()));
            blindDiskWork.setZyssjssj(DateUtils.parseDate(dto.getZyssjssj()));
            blindDiskWork.setMbwztbh(dto.getMbwztbh());
            blindDiskWork.setMbwzt(dto.getMbwzt());
            blindDiskWork.setBzrmc(dto.getBzrmc());
            blindDiskWork.setBzsj(DateUtils.parseDate(dto.getBzsj()));
            blindDiskWork.setSfsjqttszy(dto.getSfsjqttszy());
            blindDiskWork.setSjqttszyzbh(dto.getSjqttszyzbh());
            blindDiskWork.setFxbs(dto.getFxbs());
            blindDiskWork.setAqjdr(dto.getAqjdr());
            blindDiskWork.setJsjdr(dto.getJsjdr());
            blindDiskWork.setJhr(dto.getJhr());
            blindDiskWork.setDqzt(dto.getDqzt());
            blindDiskWork.setLongitude(dto.getLongitude());
            blindDiskWork.setLatitude(dto.getLatitude());
            blindDiskWork.setStartTime(DateUtils.parseDate(dto.getStartTime()));
            blindDiskWork.setEndTime(DateUtils.parseDate(dto.getEndTime()));
            blindDiskWork.setSpgbbm(dto.getSpgbbm());
            blindDiskWork.setFhyp(dto.getFhyp());
            blindDiskWork.setAttachment(dto.getAttachment());
            blindDiskWork.setDelFlag(Long.parseLong(dto.getDelFlag()));
            blindDiskWork.setCreateDept(Long.parseLong(dto.getSsbm()));
            blindDiskWork.setCreateBy(Long.parseLong(dto.getCreateBy()));
            blindDiskWork.setCreateTime(DateUtils.parseDate(dto.getCreateTime()));
            blindDiskWork.setUpdateBy(Long.parseLong(dto.getUpdateBy()));
            blindDiskWork.setUpdateTime(DateUtils.parseDate(dto.getUpdateTime()));
            blindDiskWork.setTenantId(orgCode);
        } catch (Exception e) {
            throw new BusinessServiceException(ExceptionEnum.AuthException07.getCode(), "组装盲板抽堵作业信息异常");
        }
        return blindDiskWork;
    }
}
